package cn.cdutetc.library.service;

import cn.cdutetc.library.entity.dto.BookCreateDTO;
import cn.cdutetc.library.entity.dto.BookUpdateDTO;
import cn.cdutetc.library.entity.dto.BookVO;
import cn.cdutetc.library.entity.pojo.Book;
import org.springframework.web.multipart.MultipartFile;

import jakarta.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 图书服务接口
 */
public interface BookService extends IService<Book> {
    
    /**
     * 创建图书
     * @param createDTO 图书创建信息
     * @return 图书ID
     */
    Integer createBook(BookCreateDTO createDTO);
    
    /**
     * 更新图书
     * @param updateDTO 图书更新信息
     * @return 是否成功
     */
    boolean updateBook(BookUpdateDTO updateDTO);
    
    /**
     * 删除图书
     * @param bookId 图书ID
     * @return 是否成功
     */
    boolean deleteBook(Integer bookId);
    
    /**
     * 获取图书详情
     * @param bookId 图书ID
     * @return 图书信息
     */
    BookVO getBookById(Integer bookId);
    
    /**
     * 分页查询图书
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @param categoryName 分类名称
     * @return 图书分页列表
     */
    IPage<BookVO> pageBooks(Integer page, Integer size, String keyword, String categoryName);
    
    /**
     * 分页查询图书（按分类ID）
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @param categoryId 分类ID
     * @return 图书分页列表
     */
    IPage<BookVO> pageBooks(Integer page, Integer size, String keyword, Integer categoryId);
    
    /**
     * 根据ISBN查询图书
     * @param isbn ISBN
     * @return 图书信息
     */
    BookVO getBookByIsbn(String isbn);
    
    /**
     * 增加图书库存
     * @param bookId 图书ID
     * @param count 增加数量
     * @return 是否成功
     */
    boolean increaseStock(Integer bookId, Integer count);
    
    /**
     * 减少图书库存
     * @param bookId 图书ID
     * @param count 减少数量
     * @return 是否成功
     */
    boolean decreaseStock(Integer bookId, Integer count);
    
    /**
     * 获取图书状态统计
     * @param bookId 图书ID
     * @return 状态统计信息
     */
    java.util.Map<String, Object> getBookStatusStatistics(Integer bookId);
    
    /**
     * 更新图书条目状态
     * @param itemId 图书条目ID
     * @param status 新状态
     * @param remark 备注
     * @return 是否成功
     */
    boolean updateBookItemStatus(Integer itemId, String status, String remark);
    
    /**
     * 批量导入图书（从文件路径）
     * @param file Excel文件
     * @return 导入结果信息
     */
    String importBooksFromPath(MultipartFile file);
    
    /**
     * 导出图书信息到本地路径
     * @param keyword 搜索关键字
     * @return 导出文件路径
     */
    String exportBooksToPath(String keyword);
    
    /**
     * 下载导入模板
     * @param response HTTP响应
     */
    void downloadTemplate(HttpServletResponse response);
    
    /**
     * 获取图书分类列表
     * @return 分类列表
     */
    java.util.List<java.util.Map<String, Object>> getBookCategories();
    
    /**
     * 确保分类存在，如果不存在则创建
     * @param categoryName 分类名称
     * @return 分类ID
     */
    Integer ensureCategoryExists(String categoryName);
}